#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

// 确保必要的目录和文件存在
const requiredDirs = ['data', 'public', 'uploads'];
const requiredFiles = [
  { src: 'public', dest: '.next/standalone/public' },
  { src: '.next/static', dest: '.next/standalone/.next/static' },
  { src: 'data', dest: '.next/standalone/data' },
  { src: '.env.production', dest: '.next/standalone/.env.production' }
];

console.log('🚀 准备启动服务器...');

// 创建必要的目录
requiredDirs.forEach(dir => {
  if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir, { recursive: true });
    console.log(`✅ 创建目录: ${dir}`);
  }
});

// 复制必要的文件到standalone目录
requiredFiles.forEach(({ src, dest }) => {
  if (fs.existsSync(src)) {
    const destDir = path.dirname(dest);
    if (!fs.existsSync(destDir)) {
      fs.mkdirSync(destDir, { recursive: true });
    }
    
    if (fs.lstatSync(src).isDirectory()) {
      // 复制目录
      const copyDir = (srcDir, destDir) => {
        if (!fs.existsSync(destDir)) {
          fs.mkdirSync(destDir, { recursive: true });
        }
        const files = fs.readdirSync(srcDir);
        files.forEach(file => {
          const srcFile = path.join(srcDir, file);
          const destFile = path.join(destDir, file);
          if (fs.lstatSync(srcFile).isDirectory()) {
            copyDir(srcFile, destFile);
          } else {
            fs.copyFileSync(srcFile, destFile);
          }
        });
      };
      copyDir(src, dest);
    } else {
      // 复制文件
      fs.copyFileSync(src, dest);
    }
    console.log(`✅ 复制: ${src} -> ${dest}`);
  } else {
    console.log(`⚠️  源文件不存在: ${src}`);
  }
});

// 特别处理：确保使用最新的数据库文件
const rootDbPath = path.join(__dirname, 'data', 'database.sqlite');
const standaloneDbPath = path.join(__dirname, '.next/standalone/data/database.sqlite');

if (fs.existsSync(rootDbPath) && fs.existsSync(standaloneDbPath)) {
  const rootStats = fs.statSync(rootDbPath);
  const standaloneStats = fs.statSync(standaloneDbPath);
  
  // 使用修改时间更新的数据库文件
  if (rootStats.mtime > standaloneStats.mtime) {
    fs.copyFileSync(rootDbPath, standaloneDbPath);
    console.log('📊 同步数据库: 根目录 -> standalone (根目录较新)');
  } else if (standaloneStats.mtime > rootStats.mtime) {
    fs.copyFileSync(standaloneDbPath, rootDbPath);
    console.log('📊 同步数据库: standalone -> 根目录 (standalone较新)');
  } else {
    console.log('📊 数据库文件已同步');
  }
}

// 启动standalone服务器
console.log('🎯 启动Next.js standalone服务器...');
require('./.next/standalone/server.js');